home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d13 / past1991.arc / PAST1991.TXT < prev   
Text File  |  1991-02-02  |  12KB  |  232 lines

  1.  
  2. PAST1991.DOC    January 29, 1989     For the AT&T PC6300.
  3.  
  4. A solution to the problem of operation with dates beyond 12/31/1991.  [For 
  5. AT&T/MS-DOS 3.2 rel 1.02] 
  6.  
  7. The AT&T PC6300 uses a MM58174 clock/calendar chip as the basis for its real 
  8. time clock and calendar.  When using AT&T's release of MS-DOS (or some 
  9. shareware/PD patches for generic MS-DOS or PC-DOS) this chip provides the date 
  10. and time information upon boot, for file date/time stamping and for other 
  11. software programs. The MM58174 chip does have several limitations.  The most 
  12. notable is it keeps track of the years with a 3 binary bit counter.  This 
  13. means that the clock chip is useful over a range of 8 years.  The end result 
  14. is that the standard AT&T PC6300 with AT&T's MS-DOS has been able to support 
  15. dates in the range of 1/1/84 through 12/31/91.  An attempt to set the system 
  16. DATE outside this range will fail.  This note will present a solution to this 
  17. problem for AT&T's MS-DOS 3.2 (rel 1.02).  The effect of the solution is to 
  18. shift the permitted 8 year range to 1/1/88 through 12/31/95. 
  19.  
  20. The following actions will accomplish this.  It involves changing 2 bytes in 
  21. the file IBMBIO.COM, one of the "system hidden" files that load at boot and 
  22. control operation of the PC. 
  23.  
  24. These results have been tested and found to work (report the correct day/date) 
  25. in response to the DOS DATE command, GWBASIC DATE$ function and command, TURBO 
  26. BASIC DATE$ function and Command, Word Perfect 4.2's Shift-F5, 1 date command, 
  27. files saved from WordPerfect 4.2, file creation with DOS Interrupt 21h 
  28. Functions 3Ch and 5Bh, get and set date with DOS Interrupt 21h Functions 2Ah 
  29. and 2Bh, DOS DIR command, files created by DOS's COPY CON "FileName" method of 
  30. file creation, Borland's REFLEX, Leading Edge Word Processing, QUATTRO, and 
  31. SuperCalc 4 among others.  (It will not solve the date issue with software 
  32. that goes directly to the hardware or ROM BIOS routine for the date, but 
  33. little real stuff appears to do this.) 
  34.  
  35. WARNING:  THESE ACTIONS HAVE BEEN TESTED ON A PC6300 USING AT&T'S MS-DOS 3.2, 
  36. REL 1.02.  THEY MAY NOT WORK WITH OTHER RELEASES OR VERSIONS.  DO NOT APPLY 
  37. THEM TO YOUR ORIGINAL SOFTWARE DISTRIBUTION DISKS, ONLY DO IT TO A COPY.  BACK 
  38. UP YOUR HARD DISK DATA FILES FIRST.  USE THIS AT YOUR OWN RISK.  IF you get 
  39. different results with the DEBUG commands you did something wrong or this 
  40. procedure may not work on your system.  Proceed cautiously at your own risk.  
  41. Note also that this patch might cause a problem with some virus detection 
  42. schemes which depend on testing the sum of bytes in the system files.   
  43. However the principles discussed in this paper can help an adventurous person 
  44. reasonably knowledgeable about PC's and ASM patch other releases. 
  45.  
  46. THE STEP-BY-STEP:
  47.     Note: Text enclosed in quotes ("") is intended to be entered at the 
  48. keyboard, do not type the quotes, just what is in them. Text in <> refers to a 
  49. key on the keyboard. 
  50.  
  51.     1.  Back-up your hard disk(s).
  52.  
  53.     2.  Format a floppy diskette with the /s switch to make it a bootable disk 
  54. with the system files on it.  Also, copy SYS.COM from your DOS files directory 
  55. or disk to this floppy. 
  56.  
  57.     3.  If you have a byte editor like NORTON UTILITIES or PCTOOLS that will 
  58. let you do low level byte editing of disk files, including hidden and system 
  59. files skip to paragraph 16 below. 
  60.  ----------------------------------------------
  61. If NO NORTON UTILITIES or PCTOOLS: 
  62.     4.  Copy DEBUG.COM and CHMOD.COM from your DOS files disks or
  63. directory.  (They are among the files on your distribution disks
  64. for MS-DOS.)  
  65.  
  66.     5.  Note: while using DEBUG you can quit at any time by
  67. selecting "Q" at the debug prompt.  Things are not final until you
  68. write the results to disk with the "W" command.
  69.  
  70.     6.  Place the floppy in drive A:, change to drive A: and at the
  71. A:> prompt type  "CHMOD IBMBIO.COM -R -S -H"   followed by
  72. pressing the <Enter> key.  (This makes it possible to edit the
  73. system file.)
  74.  
  75.     7.  Now load the file for editing by typing "DEBUG IBMBIO.COM" at the DOS 
  76. prompt, followed by the <Enter> key.  You should soon see the DEBUG PROMPT, - 
  77. (a dash).  Note: in the following steps be sure to use the Zero key, not the 
  78. oh key. 
  79.  
  80.     8.  At the DEBUG prompt type in "RCX" followed by <Enter> key.  You should 
  81. get a report of the contents of register CX, which is the length of the 
  82. IBMBIO.COM file, in hex notation.  For my DOS 3.2 rel 1.02 it was 43FA.  Write 
  83. this down and then press <Enter> with out pressing any other keys.  (If you 
  84. press another key it will change the value in CX, you do not want this!) 
  85.  
  86.     9.  At the DEBUG prompt type in "S 100 L 43FA B5 05" followed
  87. by pressing the <Enter> key.  This will report the location of the
  88. byte sequence B5 05 in the file.  For 3.2 rel 1.02 it gives 4
  89. locations:
  90.     xxxx:0FEC
  91.     xxxx:108A
  92.     xxxx:2ABD
  93.     xxxx:2EB1
  94. Write down the first 2 locations.  (Note, the xxxx will be four
  95. digits, all should be the same, you need not record these.)  
  96.  
  97.     10.  Now we will patch the first two locations.  At the DEBUG
  98. prompt type in "E 0FEC" followed by the <Enter> key.  The line
  99. will become:
  100.         -E 0FEC B5.
  101. TYPE in  "6A"  and press the <Space Bar>.  The line will continue:
  102.          -0FEC B5.6A 05.
  103. Type in  "0B"  and press <Enter> key.  This will return you to the
  104. DEBUG prompt.
  105.  
  106.     11.  At the DEBUG prompt type in "E 108A" followed by the
  107. <Enter> key.  The line will continue:
  108.         -E 108A B5.
  109. Type in  "6A"  and press the <Space Bar>.  This line will 
  110. continue:
  111.         -E 108A B5.6A 05.
  112. Type in  "0B"  and press the <Enter> key.  This will return you to the DEBUG 
  113. prompt. 
  114.  
  115.     12.  This concludes the patch, now save the modified file by typing at the 
  116. DEBUG prompt "W" and pressing the <Enter> key.  The computer will write the 
  117. modified file to the disk drive and report writing 43FA bytes to you and then 
  118. return to the DEBUG prompt. 
  119.  
  120.     13.  At the DEBUG prompt type in "Q" and press <Enter> to return to DOS. 
  121.  
  122.     14.  At the DOS prompt type in "CHMOD IBMBIO.COM +R +S +H" followed by the 
  123. <Enter> key to restore the hidden, system, read only attributes of the file. 
  124.  
  125.     15.  Now Jump to paragraph 20 below.
  126. ----------------------------------------------
  127. Users with NORTON UTILITIES or PCTOOLS:
  128.     16.  Using your byte level editor, such as NORTON UTILITIES or PCTOOLS, 
  129. (The following script is based on NORTON UTILITIES). select the file 
  130. IBMBIO.COM from disk drive A:. 
  131.  
  132.     17.  Search for the byte string B5 05 in the file.  It should appear 
  133. in 4 locations, at offset 3820 (EECh), offset 3978 (F8Ah), offset 10685 
  134. (29BDh), and offset 11697 (2DB1h) in the file.  Write these locations for 
  135. reference. 
  136.  
  137.     18.  Restart the Search (of byte string B5 05), but this time change the 
  138. first B5 05 to 6A 0B at offset 3820 (and write the change to file).  Also, 
  139. change the next B5 05 (at offset 3978) to 6A 0B and save that.  (Do NOT change 
  140. the remaining locations.) 
  141.  
  142.     19.  Exit the program.
  143.  
  144.     20.  Now if you are sure you followed the above script correctly, reboot 
  145. your system from the floppy disk.  The DATE function of DOS should report a 
  146. day exactly 4 years in the future. (If today is 1/29/91 and your date was set 
  147. for this before the change you should now get 1/29/95.)  Set the correct date. 
  148.  
  149.     21. Put the new file on your hard disk USING THE SYS COMMAND:
  150.  
  151.                     A:SYS C:\ 
  152.  
  153.       (Not the COPY command -- the copy command does not handle the 
  154.       Read Only-Hidden-Sys file attribute, and it is possible that the files 
  155.       will wind up at the wrong place on the disk. (IBMBIO.COM and IBMDOS.COM 
  156.       must be in the first sectors of the disk)
  157.  
  158.      Also, put the updated system file on all your boot diskettes.  Any disk 
  159. without a patched date version of IBMBIO.COM will report the incorrect date 
  160. (off by 4 years) in response to calls for the system date.  (However the DOS 
  161. DIR command will still report file creation dates correctly.) 
  162.  
  163.  
  164. WHY DOES THIS WORK?
  165.  
  166. First some background.  Per the MS-DOS ENCYCLOPEDIA (By Microsoft Press), MS-
  167. DOS supports an internal real time date range of 1980 through 2099.  This is 
  168. implemented in a variety of ways in hardware, depending on your system.  
  169. However within the MS-DOS function and Interrupt schemes the year of the date 
  170. will appear in one of several ways: 
  171.  
  172. As the number of days measured from a base date.  (This is the value returned 
  173. in register CX by INTERRUPT 1Ah on the AT&T PC6300.  The IBM PC BIOS used INT 
  174. 1Ah differently.) 
  175.  
  176. As the number of years from 1980. (This is the value of the five most 
  177. significant bits in file date stored on disk and used by function 57h to 
  178. INTERRUPT 21H to get/set file date.) 
  179.  
  180. As a binary number in the range 1980 through 2099. (This is used by functions 
  181. 2Ah and 2Bh to INTERRUPT 21h, to get/set system date.) 
  182.  
  183. The clock/calendar chip in the PC6300 provides it's date information as BCD 
  184. (binary coded decimal) data read from the 16 registers of the chip.  For 
  185. example the year is read as the low three bytes of port 7Fh, the months is 
  186. read in two parts.  The tens from the least significant bit of port 7Ch and 
  187. the units as the least significant 4 bits from port 7Bh.  Although is possible 
  188. to read the clock chip directly this is not usually done.  In "well behaved" 
  189. applications the MS-DOS functions are use to get date/time information to 
  190. assure portability of the application from one hardware system to another. 
  191.  
  192. In the PC6300 this portability is achieved through a two step process.  First 
  193. the ROM BIOS (current version is 1.43) includes routines that set and read the 
  194. clock chip.  In the AT&T PC6300 the ROM BIOS routine (INT 1Ah) accepts date 
  195. input as an offset in days, the number of days measured from January 1 of leap 
  196. year (any leap year) and converts this into the year/month/day information 
  197. needed to set the clock.  It also reverses the process, converting the BCD 
  198. information read from the clock into the number of days from the base leap 
  199. year. Note that this can only cover a range of 8 years from the base leap 
  200. year.  This offset from 1/1 of the base leap year is then converted to the 
  201. appropriate date by the operating system software, MS-DOS.  
  202.  
  203. To simplify things a bit - the MS-DOS operating system is composed of 3 files, 
  204. COMMAND.COM, (the command interpreter that converts things we type at the DOS 
  205. prompt into computer actions), IBMBIO.COM, and IBMDOS.COM.  These last two are 
  206. "hidden system files" that do much of the work.  IBMBIO.COM provides the 
  207. communications between the BIOS (and hardware) and is tailored by the computer 
  208. manufacturer to provide an I/O bridge between his system and standard DOS 
  209. kernel.  IBMDOS.COM in turn provides the DOS kernel and applications manager 
  210. functions. 
  211.  
  212. Now, recall we said that Microsoft's MS-DOS operates dates based on 1980 as the 
  213. beginning of time, that the PC6300 clock/calendar and ROM BIOS use a leap year 
  214. as the base for an 8 year span of computable time, and that the PC6300 with 
  215. AT&T's MS-DOS operated over the interval 1984-1991.  It is the system 
  216. program/file IBMBIO.COM that selects the base leap year for the AT&T PC6300 as 
  217. 1984 and performs the date conversions.  In this case adding (or subtracting) 
  218. the 4 year offset from the AT&T base date of 1984 to convert to the MS-DOS 
  219. base of 1980 and back.  The IBMBIO.COM file reads the PC6300 clock/calendar 
  220. chip using INTERRUPT 1A and receives the date as the number of days from 1/1 
  221. of the base leap year. It then adds the number of days from 1/1/80 to 1/1 of 
  222. the base leap year and turns this number over to the rest of the software for 
  223. additional computations.  By changing the 4 year offset to 8 years in the AT&T 
  224. PC operating system we would have a date range of 1988 to 1995.  The above 
  225. brief patch script does just that, changing the 1984 base date (05B5h days 
  226. from 1/1/80) to 1988 (0B6Ah days from 1/1/80).  Once we reach 1992 (the next 
  227. leap year) we can repatch with 111Fh (that is 0B6Ah + 05B5h) for the range 
  228. 1/1/92 through 12/31/99 - may our machines live that long! 
  229.  
  230. -----------Donald Palomaki 7014 Ebbtide Ln Burke, VA 22015 
  231. 
  232.